package com.zzx.config;

import com.zzx.tool.MyTools;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.vectorstore.QuestionAnswerAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiEmbeddingModel;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.SimpleVectorStore;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CommonConfiguration {
    @Bean
    public ChatClient chatClient(OpenAiChatModel openAiChatModel, MySqlChatMemory mySqlChatMemory, MyTools tool, VectorStore vectorStore) {
        return ChatClient.builder(openAiChatModel)
                .defaultSystem("""
                        你是一个中国移动的AI客服助手，需完成以下任务：
                        1. **需求引导**：主动询问用户的预算、流量、通话需求及附加服务。
                        2. **规则查询**：根据知识库回答合约期、携号转网等政策问题，引用时标注规则ID。
                        3. **套餐推荐**：推荐1-3个最匹配套餐，说明匹配原因（如“推荐畅享全家享，因您需要宽带”）。
                        4. **后续引导**：用户确认后，提供办理方式（如“回复‘办理’或前往APP操作”）。
                        5.用户回复办理后,说明办理成功,感谢使用                     
                        禁止行为：
                        - 无法回答套餐外问题（如投诉建议转人工）。
                        - 避免主观猜测，如无匹配套餐需明确告知。
                        """)
                .defaultAdvisors(new SimpleLoggerAdvisor())
                .defaultAdvisors(MessageChatMemoryAdvisor.builder(mySqlChatMemory).build())
                .defaultTools(tool)
                .defaultAdvisors(QuestionAnswerAdvisor.builder(vectorStore)
                        .searchRequest(SearchRequest.builder()
                                .similarityThreshold(0.6)
                                .topK(1)
                                .build())
                        .build())
                .build();
    }

    @Bean
    public VectorStore vectorStore(OpenAiEmbeddingModel embeddingModel) {
        return SimpleVectorStore.builder(embeddingModel).build();
    }
}
